System and method for a work distribution service

ABSTRACT

Systems and methods for a work distribution service. At a multi-tenant platform that provides a work distribution service for a plurality of external systems, a priority is assigned to a first work item of a first external system. The work item is received via a RESTful work item API call request. The priority is assigned based on work item attributes of the work item and a workflow instruction corresponding to workflow information specified by the work item. The workflow instruction is provided by the external system via a RESTful Workflow API. A worker is assigned to the work item based on: the priority of the work item, the workflow information, and worker state managed by the first external system via a RESTful Worker API. The worker state includes worker attributes. The work item is generated by the external system, and the workflow instruction is managed by the external system.

CROSS-REFERENCE TO RELATED APPLICATIONS

This application claims the benefit of U.S. Provisional Application Ser. No. 61/953,562, filed on 14 Mar. 2014, which is incorporated in its entirety by this reference.

TECHNICAL FIELD

This invention relates generally to the platform as a service field, and more specifically to a new and useful system and method for a work distribution service in the platform as a service field.

BACKGROUND

Call centers and customer care centers today build complex infrastructure to manage distributing customer calls and requests to workers that can respond to the customers. In other industries, companies must build similar infrastructure to serve other problems of work distribution. Developing such infrastructure is costly to develop and maintain. Thus, there is a need in the platform as a service field to create a new and useful system and method for a work distribution service. This invention provides such a new and useful system and method.

BRIEF DESCRIPTION OF THE FIGURES

FIG. 1 is a schematic representation of a system according to an example embodiment;

FIG. 2 is a flowchart representation of a method according to an example embodiment;

FIGS. 3-5 are exemplary workflow instruction documents according to example embodiments;

FIG. 6 is a communication flowchart of retrieving a workflow instruction document according to an example embodiment;

FIG. 7 is schematic representation of a system according to an example embodiment;

FIG. 8 is a flowchart representation of a method according to an example embodiment;

FIG. 9 is a flowchart representation of a method according to an example embodiment;

FIG. 10 is an exemplary workflow instruction document according to an example embodiment;

FIG. 11 is a representation of a data structure of an exemplary work item according to an example embodiment;

FIGS. 12A-C are representations of exemplary prioritization functions according to example embodiments;

FIGS. 12D-E are representations of exemplary distribution functions according to example embodiments;

FIG. 13 is a flowchart representation of a method according to an example embodiment;

FIG. 14 is a representation of exemplary account records managed by a multi-tenant account module according to an example embodiment;

FIG. 15 is a representation of exemplary work collection sets managed by a work collections module according to an example embodiment;

FIGS. 16A-C are a flowchart representations of methods according to example embodiments;

FIG. 17 is an architecture diagram of a work distribution system according to an example embodiment;

FIG. 18 is an architecture diagram of an application server of an external system according to an example embodiment; and

FIG. 19 is an architecture diagram of a worker endpoint device of an external system according to an example embodiment.

DESCRIPTION OF THE PREFERRED EMBODIMENTS

The following description of preferred embodiments of the invention is not intended to limit the invention to these preferred embodiments, but rather to enable any person skilled in the art to make and use this invention.

1. System for a Work Distribution Service

As shown in FIG. 1, a system 100 for a work distribution service of a preferred embodiment can include a worker application programming interface (API) 160, a worker state server 180, a work item API 150, a set of work collections 110, and a work distribution processing engine 120. The system functions to manage and facilitate customized work distribution solutions. The system preferably enables outside developers to develop use-case specific implementations within the generalized framework of the system. The system can serve as a set of platform primitives and tools from which arbitrarily complex work distributions solutions can be built quickly and easily. The system preferably includes a number of input/output programmatic interface channels to connect workers with sources of work.

The system is preferably implemented as a work distribution service of a multi-tenant infrastructure. The system may alternatively be used as a single tenant instance (e.g., an on premise solution). As a single tenant implementation, the system preferably retains the flexibility provided in a similar multi-tenant version so that a developer can customize the single tenant implementation for a developer's own purpose. The system may additionally be implemented in combination with or in cooperation with a communication platform 107. The communication platform is preferably used in the execution of communications based applications. For example, the communication platform can facilitate execution of automated call logic such as in U.S. Pat. No. 8,306,021 issued on 6 Nov. 2012, which is hereby incorporated in its entirety by this reference. The system and/or a second communication platform may communicate over a variety of different communication protocols and mediums such as voice (e.g., PSTN, SIP, WebRTC, etc.), video, screen sharing, text messaging (e.g., SMS, proprietary IP based messaging, etc.), media messaging (e.g., MMS, proprietary IP based messaging, etc.), email, fax, and/or any suitable communications protocol. The system may alternatively be applied to any suitable problem with challenges in matching a work item to a worker that can work on the work item. For example, the system can additionally be applied to crowd sourced services such as vehicular ride-share platforms, service booking products, question/solution applications, and/or any suitable problem relating to the pairing of a pool of workers with worker requests.

As a multitenant infrastructure, the system can additionally include an account system within which an account record or records are stored to maintain individual account instance implementations. An account can include various operational settings and preferences. Also management of workers, work items, work distribution workflows, collections, and/or media can be scoped within an associated account. Herein, an account (or more specifically a developer account or managing account) defines the controlling account for at least one particular set of workflow for distributing work items to workers. The system preferably functions to allow a variety of different accounts address distinct work distribution problems in a flexible and customized manned.

The worker application programming interface (API) 160 of a preferred embodiment functions to enable a worker endpoint to interface with the system. Additionally, other suitable sources of worker related metadata may communicatively interface with the system through the worker API. For example, an external presence service may supply presence metadata about a set of workers. The worker API 160 is preferably a REST API but may alternatively be SOAP or any suitable type of API. Preferably worker status is maintained for each worker of each account instance that is instantiated and executing on the platform. The worker API 160 in one variation may be used over a realtime communication channel established between the system and a set of worker endpoints. The realtime communication channel can be a webRTC media channel, a websocket, or a channel using any suitable realtime communication protocol. The realtime communication channel may additionally integrate with a work distribution interface 190. A work distribution interface can be integrated within the worker API 160 or may alternatively be separate interface.

A worker endpoint 140 can include a worker application endpoint 141 and a media endpoint 142. A worker application endpoint is preferably a client application accessible by the system 100 over an internet protocol channel. The worker application endpoint 141 may be configured by an account holder to provide any suitable functionality. For example, user interfaces may be displayed allowing a worker to login, set status, display information relating to a current or past work item, append meta-data to the work item (to be saved internally or synchronized with the system), stream realtime worker attributes (e.g., geolocation information) or provide any suitable customized functionality. The worker application endpoint 141 can be a desktop application, a mobile application, an embedded application of a device (e.g., a wearable computer), or any suitable form of an application. In one variation, the worker application endpoint 141 may be provided by the system entity in part or whole. For example, a worker application SDK could be provided to facilitate easier integration with the system. Similarly, the functionality of the worker application endpoint 141 can be embedded within a separate application such as a client communication application used to make IP-based voice/video calls. As one example, the worker application endpoint 141 is used as a call center application—the application is used to connect and inform a worker about a current customer work request. In another example, the worker application endpoint 141 is a mobile application used by volunteer drivers within a car share program—the application is used to assign the driver to a customer requesting a ride.

The worker endpoint 140 can additionally include a media endpoint 142 such as a voice endpoint (e.g., a PSTN phone number or SIP address), video endpoint, screen-sharing endpoint, messaging endpoint (e.g., endpoint for SMS, MMS, or IP-based messaging), and/or any suitable type of media endpoint. In one variation, a client based media endpoint can be integrated directly into the worker application endpoint 141. The status of the media endpoint 142 may additionally be integrated with the worker API 160 such that status can be updated based on media endpoint activity. For example, when a worker ends a call and hangs up, the worker status can be set to available.

The worker state server 180 of the preferred embodiment functions to maintain and monitor worker status and properties. The worker state server 180 is preferably in communication with a worker endpoint (e.g., 140) through the worker API (e.g., 160). As described above, other information sources can interface with the system Dm; the worker state server 180 can include additional interfaces to access the additional information sources. The worker state server 180 can store worker related information. Workers are preferably stored in association with a parent managing account that manages the account instance within the system 100. Multiple accounts each have independent pools or collections of workers. In one variation, a collection of workers can be made public or shared across accounts.

The work item API 150 of the preferred embodiment functions as an interface through which work items can be added to the system. A work item (e.g., the work item 111 of FIG. 1) is preferably a task or a request made on behalf of an account to be enqueued and serviced by a worker. Similar to the worker API 160, the work item API 150 is preferably a REST API but may alternatively be SOAP or any suitable type of API. The work item API 150 can be used to add, remove, read, and/or modify a work item. Modification to a work item can additionally be performed while the work item is in a collection. Additionally, the system can include a set of workflow related instructions, service calls, or other suitable mechanisms to trigger creating a work item on behalf of some object. The instructions can be executed during a related operation of the platform (e.g., handling or routing a phone call). If the workflow instruction (e.g., an instruction included in the workflow instruction document 121 of FIG. 1) is encountered, a work item can be added to a collection according to the parameters of the workflow instruction. When used in combination with a communication platform (e.g., 107 of FIG. 1), a work item can include a reference to a voice call, a video call, screensharing session, text message, media message, or any suitable type of media. A work item associated communication may be synchronous or asynchronous. The work item associated communication may additionally be incoming communication, established communication, or an outbound communication. Alternatively the work item can be made on behalf of any suitable object.

In one implementation, a work item (e.g., the work item 111 of FIG. 1) includes a set of attributes. At least some of the attributes may be defined for the particular use-case. The attributes can be characterized in a JSON object, and XML document, or any suitable data object descriptor. For example, work item can include any metadata related to the communication such as an originating phone number or endpoint address. The work item can include a reference to external media such as a current communication session (e.g., phone call or video chat session), an image, user-account profile, or any suitable type of media.

The set of work collections 110 of the preferred embodiment function to store pending work items (e.g., the work item 111). A work collection can have some natural priority and operational logic that define default behavior such as executing a first in first out type dequeuing methodology. The collection can be a queue, a bin, a set, a list, or any suitable collection. The collection is more preferably ordered in response to prioritization specified by the work distribution processing engine 120. The collection may alternatively be an unordered collection of work items.

The work distribution processing engine 120 of the preferred embodiment functions to process queued/added work items in coordination with the worker resources. The work distribution processing engine 120 can be triggered in response to work item activity (e.g., a new work item), worker activity (e.g., change in worker status), or collection status (e.g., volume of work items), and/or any suitable event. In a preferred embodiment, the work distribution processing engine works on a selected work item. The work distribution processing engine preferably includes a component to process a workflow instruction document. A workflow instruction document (e.g., 121 of FIG. 1) is preferably a script, an application file/object, set of configurations, or any suitable customizable set of instructions. The instructions can be used to define logic on how a particular work item is paired with a worker. The properties of the work item, the workers, and the status of the collection(s), may be used within the logic of the workflow instruction document. In a preferred variation, the work distribution processing engine 120 can include a component to retrieve a workflow instruction document from a remote server (e.g., the server 130 of FIG. 1). An externally retrieved workflow instruction document can enable external developers to use internal logic to dynamically customize the manner of prioritizing and assigning a work item to a worker. Alternatively, a workflow instruction document can be locally cached or stored. Account defined directives are processed to select a worker managed by the worker status server. The work distribution processing engine 120 or alternatively the system 100 can include a distribution interface (e.g., the distribution interface 190 of FIG. 1), which coordinates distribution of a work item.

2. Method for a Work Distribution Service

A method for a work distribution service of a preferred embodiment can include collecting worker status S100, adding work items to a collection S200, prioritizing work items in the collection through developer directives S300, and distributing a work item to a worker according to priority of the work item in the collection S400. The method functions to provide a set of programmable primitives and tools usable by a variety of applications to facilitate matching requests to entities that can fulfill the requests. The method is preferably applied in the case of matching user-based workers to work. One exemplary usage, would be for a customer service application pairing customers to company representatives. The method may alternatively be used in matching any two items. The workers are preferably characterized as being a limited resource such as people, businesses, machines, or any suitable entity capable of fulfilling a work item request. The method preferably utilizes a programmable worker interface (e.g., 160) through which information can be obtained from a worker and delivered to the worker; a programmable work item interface (e.g., 150) through which work items are added to the system; and a distribution processing engine interface (e.g., 170 of FIG. 1) used to apply defined logic on assigning work and prioritization.

The method is preferably implemented within a multitenant platform as described above, but may alternatively use any suitable system. When applying the method for a specific account instance within the platform, a single entity can control supplying the work items and the workers to fulfill the work requests. However, the flexibility of the method can enable any number of parties to participate within a single account instance. For example, one account instance of the method can allow work items to be retrieved from a plurality of different sources and parties (authenticated on behalf of the account), and similarly the pool of workers may come from yet another source or sources. The method functions to connect sources of work requests and workers to fulfill the work.

Herein, the method is described as it could be used in communications-based work distribution application (e.g., call centers, customer support applications, etc.), but the method may alternatively be applied more generally to any suitable application of assigning a work request to a pool of workers.

Block S100, which includes collecting worker status, functions to monitor and manage workers' capability to fulfill a work item. Block S100 preferably includes receiving worker status update through a worker API (e.g., 160). The worker API is preferably a REST API but may alternatively be SOAP or any suitable type of API. Preferably worker status is performed for each account instance that is instantiated and executing on the platform and for each worker of those account instances. Collecting worker status can further include establishing a realtime communication channel with a client application of a worker. The realtime communication channel can be communicated through webRTC, a websocket, or any suitable realtime communication protocol. In one variation, the realtime communication channel is used for pushing work items requests to a worker application endpoint in addition to collecting worker status. Additionally, worker status can be collected through secondary channels. For example, presence information can be obtained from an outside source. Outside sources are preferably associated with a worker through some unique identifier.

Worker status can be collected based on API calls (via API 160) made to a worker resource (of the worker state server 180). A worker resource is preferably a data object, record, or set of data properties stored within an endpoint state server (e.g., 180). A worker resource can include a unique identifier, account properties, worker information, status, a status callback reference, group information, attributes, and/or any suitable properties. A unique identifier can be an alphanumeric code or any suitable identifying label to identify the worker when making calls. The account properties can include a secure identifier of the account or subaccount managing the work distribution instance. Worker information can include worker based information such as name, gender, and other suitable properties. The status property preferably defines the state of the worker. Status preferably includes at least two classes of state: available and unavailable. Other status states can include offline, online, idle, busy, and/or any suitable form of status. The status callback reference can include a URI and/or a method that defines a resource that can be notified upon status change in the status. The group information can include classification, labels, tags, or other associations to which the worker belongs. The group information can be used to map an organizational map to the worker such as which business department(s) the worker works under. The attributes property is preferably a customizable set of attributes. The attributes in one implementation are defined as a JSON object but may alternatively be an XML object or any suitable data interchange format. The properties within the attributes field can be arbitrarily set. For example, a customer service application may include a language field which can be set with a set of languages the worker can speak and the proficiency at each language, seniority level which can be set with a value indicating how junior or senior the worker is, and a skills field including tags for any special skills the worker may have. A worker resource can be updated at any suitable time. As mentioned above, a realtime communication channel may be established and used in updating worker attributes and/or other properties. As one example, a driver based application may continuously or frequently update the geolocation information of a driver by updating a location attribute. Any API calls made in the method can further include authenticating parameters, which are used to verify authenticity of the API calls.

In one implementation, the method could include providing a worker endpoint application (e.g., 140 of FIG. 1) and/or software development kit to facilitate connecting through the worker API 160. Providing a worker endpoint application can simplify the process of interacting with endpoint state server 180. The provided worker endpoint application can include a worker application endpoint (e.g., 141 of FIG. 1) and/or a media endpoint (e.g., 142 of FIG. 1). The worker application endpoint (e.g., 141 of FIG. 1) is preferably used in communicating worker status and receiving work items. Media related to assigned work items can be delivered to the media endpoint (e.g., 142 of FIG. 1). In the case of using the method in combination with a communications platform, the worker endpoint can be provided through a client communication SDK. The client communication SDK may be used in enabling voice, video, messaging, and/or other forms of communication through the SDK. The SDK could be extended to provide worker registration and status update functions.

Block S200, which includes adding a work item (e.g., 111 of FIG. 1) to a collection (e.g., 110 of FIG. 1), functions to enqueue/add work items before assigning them to a worker. A work item (e.g., 111) is preferably a data object that characterizes a body of work that can be fulfilled/serviced by a worker. The work item preferably includes a set of properties defining content and conditions of the request. In one implementation the work item includes a use-case defined attributes object (e.g., a JSON or other suitable data interchange format). A developer can include any suitable set of attributes and data architecture within the work item. These attributes may be used in the prioritization processing stage and/or within the worker endpoint (e.g., 140). The instruction and/or request to add the work item can specify a routing rule URI, which can be used in block S300 to determine the distribution directives.

In one preferred implementation, a work item represents an incoming or outgoing communication. If the work item is an asynchronous communication (e.g., an SMS, MMS, email, fax, IP message, and the like) then the contents of the communication may be included within a content attribute of the work item. If the work item is an incoming synchronous communication, the work item can include any metadata related to the communication such as an originating phone number or endpoint address, and the work item can include a reference to the media. Adding a work item to a collection may include holding, parking, or otherwise managing in-session, established media before being distributed to a worker. If the work item is made in association with a live customer call, then the customer call session can be set to be handled according to an application defined for that state of call waiting. In one variation, all work items are enqueued and processed before being assigned to a worker. In another variation, work items may be enqueued if there is no worker available—if a worker is available, the work request may be automatically distributed to an available worker. When adding the work item to a collection, the collection may be a default collection, but the collection may alternatively be a specified collection. Multiple collections may be maintained. The distribution processing stage can act on the different collections in any suitable manner.

In one variation, adding work items to a collection includes adding a work item through an application programming interface (e.g., the work item API 150 of FIG. 1). In an implementation, work items are added by an account application (e.g., the account application 105 of FIG. 1) of an external system or a communication platform (e.g., the communication platform 107 of FIG. 1). The interface is preferably a web API such a REST API, SOAP API, or any suitable type of API. Adding a work item can be added by an account posting to a work item endpoint, specifying attributes of the work item. In response to a request, the work item is created and added to a general or specified collection. A work item similar to a worker resource can include a unique identifier. In response, a request developer can receive information indicating the status of their request. Successfully adding a work item can result in a response indicating the successful addition of the work item and information about the created work item (e.g., a unique identifier). The unique identifier could be used to update the attributes of the work item while enqueued. For example, if the work item relates to traveling entity, the geolocation of the traveling entity could be a defined attribute, which is updated while enqueued.

As mentioned above, the work distribution platform may be implemented in combination with a communication platform (e.g., 107) and/or any suitable type of secondary platform. The secondary application may include functionality or a mechanism to execute or trigger application instructions. In the communication platform (e.g., 107), a set of telephony instructions can be used to instruct a communication router on how to interact and/or route the communication. The set of secondary platform instructions or triggers may include a work enqueue instruction. The enqueue instruction is used to trigger the queueing of a specified platform item. The enqueue instruction preferably results in a work item being generated and optionally a media item if required. For example, a telephone call may be handled within the communication platform (e.g., 107). At some point during the call an enqueue instruction may be encountered. The enqueue instruction can include properties such as a routing rule URI to fetch a workflow instruction document. The properties of the call can be packaged into a work item and added to a collection (e.g., by using the work item API 150). Additionally, the media of the call could be temporarily distributed to a wait-state application. The work item will include a reference to the communication session in the wait-state application. When distributed to a worker, the communication session is preferably transitioned to the worker.

Other suitable interfaces can be created to manage additional or alternative forms of interfacing with the collection of work items. For example, an email interface could be created wherein an account could direct inbound email messages through the email interface of the work distribution system, and the emails could be added as work items.

Block S300, which includes prioritizing work items in the collection through developer directives functions to apply work item ordering and selection. Block S300 is preferably invoked upon enqueueing or adding a work item. Alternatively, the enqueued work items can be polled periodically, upon worker status changes, or according to any suitable event. Prioritizing work items preferably includes processing queued work items according to the developer directives. The developer directives are preferably a set of workflow instructions defining workflow and logic in prioritizing, assigning, and/or distributing a work item to a worker. Developer directives are preferably included in a workflow instruction document—a workflow instruction document (e.g., 121 of FIG. 1) can be formed as a script, an application file/object, a markup language document defining logic, or any suitable mechanism for characterizing processing. The workflow instruction document can be formed through a set of different instruction primitives that can be used to define logic and actions taken for distributing work. Prioritizing work items preferably includes observing worker status. The state of a worker, a set of workers (e.g., set of available workers), of a work item, or a set of work items can be used as inputs to the workflow instruction document. In a preferred embodiment, the workflow instruction document is processed for a selected work item and the worker information can be referenced within the workflow instruction document. Alternative approaches may apply an alternative focus such as processing the workflow instruction document for each available worker wherein the set of workflow items can be referenced in the document. The workflow instruction document may be used to customize distribution approach between different account instances. More preferably, the workflow instruction document can enable dynamically adjusting distribution of work items based on a particular work item. As such, a workflow instruction document can be used to serve a variety of use cases. For example, a workflow may be designed to distribute work according to worker (agent) language skills as shown in FIG. 3. In some variations, distribution heuristics and rules may be internal and fixed within the system, some may be configured behavior through account settings, and others could be uniquely defined within a workflow instruction document. In one variation, a workflow instruction document can include a function defining prioritization of the work item for selection within the collection and a function defining distributing a selected work item.

One type of heuristic is distribution prioritization, which may be based on origin of a work item (e.g., who is the work item for), the history of the work item (e.g., how long has the work item been queued, how many times has it been queued), worker properties, or any suitable type of prioritization. In an example of user-prioritization, work items can be prioritized based on the user profiles associated with the work items. The user profiles in this example can be customers of a developer account. As an example, there may exist three tiers of user profiles: free, basic plan, and premium plan. The work requests items can be prioritized in order from highest to lowest as premium, basic, and free through customizing a workflow instruction document as shown in FIG. 4. As an example of a history prioritization, work items could be prioritized according to wait-time. This heuristic may be combined with the user-type prioritization to prevent lower priority work items from suffering excessively long amounts of time when there is a high volume of higher user-priority work items. Workers may be similarly prioritized. In one example, a worker can be assigned to two groups for example a sales group and a support group. If the worker specialized in sales, then the worker is prioritized for sales related work requests, but if no sales work items are queued, then the worker can serve support related work requests. Such worker prioritization can improve utilization of worker resources. In one other example, prioritizing work can include prioritizing worker selection based on idle time of a worker, which functions to more evenly distribute work across workers.

As another heuristics, prioritization can apply expanding targets, which functions to attempt to match each work item with the best worker while ensuring the service level targets are met consistently. As shown in FIG. 5, the expanding targets can attempt a top priority target for a first period, then the target worker is expanded for a next if the work item is not serviced in the first period. The target can continue to expand until a default or widest target is used. Expanding targets can be customized to a particular user profile associated with the work item to direct the work item to an individually assigned worker. For example, a user making a call to a banking customer service center may have an assigned financial advisor. The financial advisor could be set as the initial target for that call.

In one variation, the workflow instruction document is a local configuration. An account, prior to use of the method, can set a workflow instruction document or otherwise define the sorting directives. A pre-defined workflow instruction document can be used globally within an account instance. The pre-defined workflow instruction may alternatively be assigned to a particular collection, to work items with a particular property, or assigned in any suitable manner. In another variation, the workflow instruction document is preferably retrieved in an external application server (e.g., one controlled and operated in accordance with an account holder) through a remote procedural call (RPC) type request and response model. As shown in FIG. 6, metadata around the work item, the collection, and/or the workers is preferably sent to a specified routing rule URI. The URI preferably references an application server of the entity associated with the account instance. The application server preferably uses internal state information, performs any suitable API requests back to the workflow distribution system, and generates a workflow instruction document. The workflow instruction document is returned to the work distribution processing engine. In one variation, an account instance can be selectively configured for local storage of the directives or to retrieve the instructions from an external resource.

In alternative embodiments, the method may be implemented without granular customization of prioritization. The work distribution processing engine can use internal prioritization heuristics such as those mentioned above. A set of prioritization hooks could be built into the work distribution processing engine such that an account instance could selectively invoke different heuristics.

Block S400, which includes distributing a work item to a worker according to priority of the work item in the collection functions to deliver a work item to a worker endpoint. In response to the prioritizing of work items, a pairing of a work item and a worker is preferably selected. The selection is preferably based upon the defined logic of selecting a targeted worker. When a pairing of a work item and worker is established, the work item is delivered to the worker endpoint. As mentioned above, a worker application endpoint (e.g., 141) can have an established realtime communication channel to the work distribution system 100. The work item (e.g., 111) and the associated properties are preferably pushed or otherwise transmitted to the worker application endpoint (e.g., 141). In some variations, the work item (e.g., 111) may be delivered to a media endpoint (e.g., 142) in addition to or instead of a worker application endpoint (e.g., 141). In one variation, the work item of an asynchronous communication can include the media content of the associated communication. The media content could be transmitted to the worker application endpoint 141, but the media content may alternatively be delivered over the original medium as the incoming communication or over any suitable protocol. For example, an inbound SMS message to a customer service center is queued as a work item containing a content property indicating the SMS content. When a worker is assigned to the work item, the SMS content can be detected and the work item is delivered as an SMS message. In another variation, a work item can include a reference to external media content. The external media content can be simultaneously transmitted to a media endpoint 142 of a worker. For example, an incoming phone call to a customer service center triggers a creation and queuing of a work item, the caller is directed to a wait-state application to handle the call session while waiting for assignment to a worker. When a worker is selected, the work item and related metadata may be delivered to a worker application endpoint 141, and the caller is redirected and connected with a media endpoint 142 of the worker. In the case of outbound communications associated with a work item, the intended destination is preferably characterized in the properties of the work item. When the work item is delivered to the worker application endpoint 141, a communication can be established with the destination endpoint. Alternatively, both the worker and the destination can be called and merged.

If work item is distributed to a worker, but the worker does not respond to the work item, the method may include redistributing the work item and updating the worker status. For example, if a call associated with a work item is directed to the worker, but the worker never picks up or responds to the call, the status of the worker can be updated to ‘not ready’. The worker may be required to update status again before being assigned to a work item. In another variation, a nonresponsive callback may be defined so that the response can be developer defined.

In some cases, a worker may be unable to complete or fully fulfill the work item. The worker endpoint could be configured to enable a work item to be returned or re-entered in the system to be redistributed. In one variation, the work item could be programmatically added as a new work item preferably with attributes to indicate how to better distribute the work to a more qualified worker. However, the work item may be re-entered (e.g., with the same work item), wherein the method automatically weights the prioritization of distributing the work item to a qualified worker. The workflow instructions can include mechanisms that can be applied to logging such as marking preference level for different work distribution options.

Additionally the method may include work distribution logging, which functions to collect and provide access to worker, work, and collection analytics. Logging can record individual worker statistics (e.g., number of work items, rate of work items, distribution of types of work items), success of routing (e.g., are work items distributed to preferred, secondary, or last-resort workers), collection statistics (e.g., utilization capacity, distribution of work item properties), and/or any suitable type of information.

3. System for a Multi-Tenant Work Distribution Platform

FIG. 7 is a schematic representation of a work distribution system 700 for a multi-tenant work distribution platform, according to an example embodiment. The system 700 is similar to the system 100 of FIG. 1.

Multi-Tenant

The system 700 provides a multitenant platform meaning that the work distribution platform can be used for the processing of one or more applications of a plurality of external systems. Each external system (e.g., 770) has at least one work distribution account at the system 700. For example, a call center service provider, CRM service provider, and a vehicular ride-share platform can each have work distribution accounts at the system 700. As another example, multiple different call center service providers can each have work distribution accounts at the system 700. As yet another example, a vehicular ride-share service, a service booking platform, and a question/solution application can each have work distribution accounts at the system 700. In the example embodiment of FIG. 7, an external system can have multiple work distribution accounts. For example, an external system that has multiple business units (e.g., sales and customer support) can add a work distribution account for each of the business units. In the example embodiment, an external system can add sub-accounts to each one of its work distribution accounts. For example, a call center system provider can add a sub-account to its work distribution account for each of the call center system provider's customers. By providing sub-accounts to its customers, the call center system provider can allow its customers to manage work distribution for their respective call center application instances. Management of accounts and sub-accounts, authorization for account management access, billing for account use, and fraud detection is provided by a multitenant account module (e.g., the multi-tenant account module 701). The foregoing examples are not intended to be limiting. Any type of external system can have any combination of accounts and sub-accounts at the system 700.

Modules

As shown in FIG. 7, the system 700 includes a multi-tenant account module 701, a worker API module 702, a worker state module 703, a work item API module 704, a work collections module 705, a work distribution engine 706, and a distribution API module 710.

In the example embodiment of FIG. 7, the worker API module 702 functions similarly to the worker API 160 of FIG. 1, the worker state module 703 functions similarly to the worker state server 180 of FIG. 1, the work item API module 704 functions similarly to the work item API 150 of FIG. 1, the work distribution engine 706 functions similarly to the work distribution processing engine 120 of FIG. 1, the work collections module 705 manages work collections similar to the work collections 110 of FIG. 1, and the distribution API module 710 functions similarly to the work distribution interface 190 of FIG. 1.

In the example embodiment of FIG. 7, the modules (e.g., 701, 702, 703, 704, 705, 706 and 710 of FIG. 7) include instructions that are executed by any combination of one or more processing units. In the example embodiment, each processing unit includes one or more processors communicatively coupled to one or more of a RAM, ROM, and machine-readable storage medium; the one or more processors of the processing unit receive instructions stored by the one or more of a RAM, ROM, and machine-readable storage medium via a bus; and the one or more processors execute the received instructions. In some embodiments, the processing unit is an ASIC (Application-Specific Integrated Circuit). In some embodiments, the processing unit is a SoC (System-on-Chip). In some embodiments, one processing unit includes the account module 701 the worker API module 702, the worker state module 703, the work item API module 704, the work collections module 705, the work distribution engine 706, and the distribution API module 710. In some embodiments, a plurality of processing units include the account module 701, the worker API module 702, the worker state module 703, the work item API module 704, the work collections module 705, the work distribution engine 706, and the distribution API module 710. In some embodiments, one processing unit includes one of at least one of the account module 701 the worker API module 702, the worker state module 703, the work item API module 704, the work collections module 705, the work distribution engine 706, and the distribution API module 710. In some embodiments, one processing unit includes a plurality of at least one of the account module 701, the worker API module 702, the worker state module 703, the work item API module 704, the work collections module 705, the work distribution engine 706, and the distribution API module 710. In some embodiments, the one or more processing units are included in one or more server devices.

External Systems

The system 700 is communicatively coupled to at least a first external system 770 via the worker API module 702, the work item API module 704, and a workflow API module 707 of the work distribution engine 706. In an implementation, the external system 770 is communicatively coupled to the system 700 via the distribution API module 710.

In the example embodiment, the external system 770 is at least one of a customer service system, a CRM system, a call center system, a service provider system, a vehicular ride-share system, a service booking system, a question/solution system, and any other type of external system that pairs a pool of workers with worker requests.

The external system 770 includes an application server 771 and worker endpoints 772 and 773. In the example embodiment, the worker endpoints 772 and 773 are similar to the worker endpoint 140 of FIG. 1.

The worker endpoints 772 and 773 each correspond to a respective worker of the external system 770. In an implementation, each of the worker endpoints 772 and 773 include a worker application endpoint (e.g., 774, 775) and a media endpoint (e.g., 776, 777). In the example embodiment, the worker application endpoints 774 and 775 are similar to the worker application endpoint 141 of FIG. 1, and the media endpoints 776 and 777 are similar to the media endpoint 142 of FIG. 1.

In an implementation, each of the worker endpoints 772 and 773 is associated with at least one processing unit that stores and executes machine-readable instructions of a worker application (e.g., 1916 of FIG. 19) associated with the worker application endpoint and a media application (e.g., 1917 of FIG. 19) associated with the media endpoint of the worker endpoint. In some implementations, at least one processing unit of the respective endpoint (e.g., 772, 773) is included in one of a mobile device, a computer, a server, a wearable device, or any suitable type of device. In some implementations, worker endpoints do not include a media endpoint.

In the example embodiment, worker application endpoints include at least one of a Websocket Server Endpoint, a REST API endpoint of the distribution API 190, and an WebRTC datachannel. In the example embodiment, media endpoints include at least one of a PSTN endpoint, a SIP endpoint, and a WebRTC datachannel. In some embodiments, endpoints include e-mail addresses.

Multi-Tenant Account Module 701

The multi-tenant account module 701 functions to manage work distribution accounts of the system 700, provide authorization for account management access to access a work distribution account, bill for account use, and perform fraud detection. In the example embodiment, the account module 701 is constructed to manage account records for accounts and sub-accounts of each of the external systems of the work distribution platform (of the system 700). The account module 701 is constructed to provide authorization for account management access, billing for account use, and fraud detection. The account module 701 associates operational settings and preferences for each account record, including work distribution settings and preferences. The account module 701 associates at least one set of work distribution primitives with each account record. In the example embodiment, work distribution primitives include: 1) workers, 2) work items, 3) work distribution workflows, and 4) work collections.

An account holder (e.g., an external system having an account, or a user of the external system having a sub-account) configures and manages the work distribution primitives by using at least one of the worker API module 702, the Work Item API Module 704, and the Workflow API Module 707. In the example embodiment, an account holder configures work collections by using the workflow API Module 707. In some embodiments, an account holder configures work collections by using an API for the work collections.

In some embodiments, sets of work distribution primitives for an account are organized into primitive groups. In such embodiments, an account can have multiple primitive groups, with each primitive group having a set of workers, work items, work distribution workflows and work collections. In some embodiments, sets of work distribution primitives for an account are organized into workspaces. In such embodiments, an account can have multiple workspaces, with each workspace having a set of workers, work items, work distribution workflows and work collections.

In the example embodiment, API call requests received by the worker API module 702, the work item API module 704, and workflow API module 707 include authenticating parameters, which are used by the system 700 to verify authenticity of the API call requests. In an implementation, API call requests received by the worker API module 702, the work item API module 704, and workflow API module 707 each specify an account ID and a corresponding authentication token, and the respective module uses the account module 701 to authenticate the API call request.

In an implementation, the account module 701 uses the account ID of each API call request to bill the respective account for account use on a per API call basis.

In an implementation, the API call requests are HTTP requests.

Sub-Accounts

The account module 701 manages sub-accounts such that a hierarchy of accounts can be created. In an implementation, a work distribution account (e.g., a parent account) can create or contain multiple work distribution sub-accounts (e.g., children accounts). In an implementation, sub-accounts are created through an interface by the sub-account holder or alternatively through an API by the parent account holder. For example, an application developer may create a customer service application, and then allow end users to sign-up as customers within the developer's parent work distribution account. In an implementation, the work distribution sub-accounts operate within the scope of the parent account. In an implementation, the sub-accounts are customized by the parent account and/or customized by sub-account holder.

Fraud Detection

In the example embodiment, the account module 701 monitors, measures, and detects instances of illicit use that occur within or through the work distribution system 700. In some embodiments, a fraud scoring system monitors, measures, and detects instances of illicit use that occur within or through the work distribution system 700.

The account module 701 monitors API call requests received by the worker API module 702, the work item API module 704, and workflow API module 707 to detect fraudulent API call requests.

In an implementation, the account module 701 receives work distribution account (and sub-account) usage data (e.g., API calls), calculates a fraud score from the usage data block, detects when fraud scores of an account satisfy a fraud threshold, and takes action when a fraud score satisfies a fraud threshold block.

In an implementation, the account module 701 performs fraud detection in a manner similar to that described in U.S. Pat. No. 8,737,962, issued 27 May 2014, which is hereby incorporated in its entirety by this reference.

In an implementation, the account module 701 processes usage data to generate a metric that reflects the likelihood that illicit use of the system 700 is occurring. Fraud scores are preferably calculated for a set of fraud rules. The set of fraud rules are used to calculate a set of fraud scores (e.g., measure or indicators of fraud). Additionally, fraud thresholds can define when particular types of actions are taken. A fraud rule preferably includes a usage condition, a usage data time window, and an account age condition. The fraud rules may additionally be conditions within a single account or pattern conditions across multiple accounts. The usage conditions are particular patterns in usage data (e.g., account configuration or API call history). The usage conditions are preferably particular patterns such as some threshold on the number or percentage of events or resources that would trigger activating the fraud rule (e.g., assigning the defined fraud score for that rule). The usage condition can additionally specify conditions found across multiple accounts. For example, a usage condition may be for identical/corresponding billing information configured in more than three accounts. The usage data time window is the window that is used to define what data is analyzed. Some exemplary time windows could include the past 24 hours, the past week, the past month, the past year, or across all data (e.g., no time window). The account age condition may define for how long the rule is monitored for an account. Some illicit use scenarios may only be seen with new accounts. For example, the account age condition may configure a fraud rule to apply to an account for the first week after the account is created. If the conditions of the fraud rule are satisfied a defined score is preferably assigned. These fraud scores are preferably stored per account. If the fraud rule is defined for condition patterns across multiple accounts, the fraud score is preferably assigned to each account. The fraud score is preferably a numeric value but may alternatively be a label or any suitable construct to communicate fraud likelihood. In the example embodiment, high fraud scores indicate a greater likelihood of illicit use. In some embodiments, any suitable relationship may be defined between fraud scores and likelihood of illicit use. A fraud score is preferably associated with at least one key/identifier. The key may be an account, sub-account, an endpoint (e.g., a phone number), a credit card hash, or any suitable key. A plurality of fraud scores (e.g., one per fraud rule) is preferably calculated to monitor various entities and approaches to performing fraud in the system 700. For example, a series of fraud scores may be calculated to monitor accounts for one form of fraudulent API calls, while another series of fraud scores may be calculated to monitor credit card abuse across accounts. The fraud score is preferably indicative of activity during a specified time window, but may alternatively be an aggregate value (preferably factoring in older fraud scores to reflect multiple time windows). Calculation of fraud scores may additionally involve creating associations between subsets of the received usage data. Associations can be made based on user accounts, credit cards used to pay for accounts, endpoints or endpoint prefixes, source or destination carriers, and/or any suitable parameter that can be used to associate various data points in the usage data.

In the example embodiment, the account module 701 takes action reacting to fraud scores that indicate illicit behavior. The reaction to a fraud score may include flagging the account, throttling API call requests (or other platform usage requests) of an account, requesting additional billing information, notifying account holder, notifying an analyst of the work distribution platform, performing additional fraud detection analysis on the account, blocking particular actions on the account, or performing any suitable action. In a sub-account variation, the parent account of a sub-account is preferably notified of the sub-account illicit behavior. The notification can be an email notification, a message within a work distribution platform web platform, or notification made through the API of the work distribution platform. Account holders may have multiple sub-accounts using their service provided on top of the work distribution platform. By performing the fraud regulation by sub-accounts, the work distribution platform can avoid taking action against the parent account itself since many sub-accounts may be using the work distribution platform in a proper manner. This functions to simplify and abstract the fraud prevention aspect away from parent account holders such that the work distribution platform can handle illicit use detection.

In an implementation, the account module 701 includes a set of fraud rules (e.g., a rule set) stored using any suitable schema. The rule set preferably enables various heuristics to be configured and/or updated to keep current with the latest fraud attempts. Fraud score patterns may include thresholds for a particular fraud score or alternatively a group of fraud scores. Rule sets may be dependent on measured metrics in combination with a threshold, time period for the metrics, and account age. Alternatively, any suitable parameters may be specified to determine a rule set. Fraud score patterns may alternatively be trending patterns from a time series of related fraud scores. Fraud reactions preferably include suspending an account, blacklisting credit card numbers, blacklisting application URI's or IP's, rate-limiting services provided to an offending account, remove or adjust services provided to an offending account, flag the account for a human fraud analyst to investigate, and/or any suitable course of action. There may additionally be different level of responses based on the severity of the fraud score, and fraud reactions may be applied in stages if the fraud score does not subside.

Work Distribution Account Records

In the example embodiment, each work distribution account record includes the following fields: 1) Parent Account ID, 2) Account ID, 3) Authentication Token, 4) Account Holder Information, 5) Account Preferences, 6) Account Balance, 7) Primitive Groups, and 8) Fraud Scores. For parent accounts, the Parent Account ID is empty. For sub-accounts, the Parent Account ID indicates the parent account. The Account ID and the Authentication Token are compared with an Account ID and an Authentication Token of a received API call request to authenticate the request. Account Holder Information includes information such as, for example, account holder name, account holder contact information, account holder billing information, and the like. Account preferences include any operational settings and preferences, and work distribution settings and preferences of the account holder. Account Balance indicates billing charges for the account holder's use of the work distribution system 700, including charges for each billable API call request. Primitive Groups indicate the primitive groups configured for the account holder. In implementations in which the work distribution system uses workspaces instead of primitive groups, the account record indicates workspaces configured for each account holder. Fraud Scores indicates fraud scores calculated by the account module 701 for the account holder. FIG. 14 depicts exemplary account records managed by the multi-tenant account module 701. As shown in FIG. 14, account records 1401 and 1404 are associated with the same account holder. The account record 1401 has two sub-accounts 1402 and 1403. The sub-accounts 1402 and 1403 are associated with customers of the account holder of the account record 1401. The account holder of account records 1401 and 1404 is associated with an external system (e.g., “Salesforce.com”). The account holder of sub-account record 1402 is associated with a second external system (e.g., “CocaCola.com”) and the account holder of sub-account record 1403 is associated with a third external system (e.g., “HomeDepot.com”). The account holder of account record 1405 is associated with a fourth external system (e.g., “Shopify.com”).

Worker API Module 702

The worker API Module 702 functions to provide a Worker API that is used by an external system (e.g., 770) to manage workers of a specified account.

Configuration and state of each worker is managed by the worker state module 703 in association with a corresponding account or sub-account. In the example embodiment, the external system uses the Worker API to configure worker attributes for each worker. In the example embodiment, a worker application associated with a worker application endpoint (e.g., 141 of FIGS. 1, 774 and 775 of FIG. 7) of the external system 770 uses the Worker API to provide a worker state of a worker associated with the worker application endpoint. In the example embodiment, the Worker API is a REST API.

The Worker API Module 702 is constructed to process requests received from an external system (e.g., 770) to add a worker to the work distribution system 700, and requests received from an external system to remove a worker from the work distribution system 700, read a worker resource (stored in the worker state module 703) of a worker, and update a worker (e.g., update worker status, update worker attributes).

In the example embodiment, API call requests received by the worker API module 702 include authenticating parameters, which are used by the system 700 to verify authenticity of the API call requests. In an implementation, API call requests received by the worker API module 702 specify an account ID and a corresponding authentication token, and the worker API module 702 uses the account module 701 to authenticate the API call request.

Table 1 shows the API call requests (and the corresponding parameters) that are processed by the worker API module 702, in accordance with an implementation.

As shown in Table 1, in an implementation, the Add Worker API call request includes the optional parameter <Primitive Group Identifier> to specify a Primitive Group Identifier for the added worker. In an implementation, the work distribution system 700 automatically assigns a Primitive Group Identifier for the added worker based on Account Preferences of the work distribution account specified by the <Account Identifier> parameter.

TABLE 1 Worker API WORKER API CALL REQUEST PARAMETERS Add Worker <Worker Name>, <Worker Attributes>, <Account Identifier>, <Authentication Token>, (Optional Parameters: <Primitive Group Identifier>) Remove Worker <Worker Name>, <Account Identifier>, <Authentication Token> Read Worker Resource (managed <Worker Name>, <Account Identifier>, by the Worker State Module 703) <Authentication Token> Update Worker Status <Worker Name>, <Worker Status>, <Account Identifier>, <Authentication Token> Update Worker Attributes <Worker Name>, <Worker Attributes>, <Account Identifier>, <Authentication Token>

Worker State Module 703

The worker state module 703 functions to receive worker state for an associated account (or sub-account) via the worker API Module 702, and manage received worker state of each worker in association with the corresponding account (or sub-account). The worker state module 703 functions to provide worker state during assignment of workers to work items.

The worker state module 703 collects worker state and stores collected worker state for a worker in a respective worker resource, as described for block S100.

In an implementation, each worker resource includes the following information: 1) Worker Identifier, 2) Account Identifier, 3) Primitive Group Identifier, 4) Worker Name, 5) Worker Attributes, 6) Worker Status, 7) Worker Idle Time.

Work Item API Module 704

The work item API Module 704 functions to provide a Work Item API that is used by an external system (e.g., 770 of FIG. 7) to add work items to the work distribution system 700 for a specified account. In the example embodiment of FIG. 7, work items are similar to the work item 111 as described above for FIG. 1.

In the example embodiment, the work item API module 704 (in conjunction with the work collections module 705) adds work items to a collection, as described for block S200 of FIG. 1.

The work item API Module 704 is constructed to process requests received from an external system to add work items to the work distribution system 700, and requests received from an external system to remove, read, and modify work items included in the work distribution system 700.

In the example embodiment, an external system adds a work item by sending a Work Item API ADD request to the work distribution system 700. The ADD request specifies an account (or sub-account), work item attributes, and workflow information. In an implementation, the work collections module 705 stores work item resources for each added work item. In an implementation, a work item resource is at least one of a data object, record, or set of data properties stored within the work collections module 705. In an implementation, each work item resource includes the following information: 1) Work Item Identifier, 2) Account Identifier, 3) Primitive Group Identifier, 4) Workflow Information, 5) Work Item Attributes, 6) Work Item Age, 7) Work Item Priority, 8) Work Collection Identifier, and 9) Assignment Status.

In an implementation, the Work Item Identifier is a unique identifier assigned to the work item by the work distribution system 700. The Account Identifier and the Primitive Group Identifier identify the work distribution account and the primitive group, respectively, associated with the work item. The Workflow Information indicates the workflow information provided for the work item in the Work Item API ADD request that adds the work item to the system 700. The Work Item Attributes indicates the work item attributes provided for the work item in the Work Item API ADD request that adds the work item to the system 700. The Work Collection Identifier identifies the work collection to which the work distribution system 700 has added the work item. The Work Item Age indicates an amount of time the work item has resided in the work collection identified by the Work Collection Identifier. The Work Item Priority indicates the priority value assigned to the work item. In an implementation, if no priority has been assigned to the work item, the Work Item Priority is empty. The Assignment Status indicates the status of assignment of the work item to a worker of the system 700. In an implementation, the Assignment Status indicates one of the following states: 1) the work item is waiting to be assigned to a worker, 2) a worker of the system 700 has been assigned to the work item, but the worker has not yet confirmed receipt of the work item, and 3) a worker has been assigned to the work item and the worker has confirmed receipt of the work item, and 4) the work item has been cancelled before being assigned a worker. In an implementation, in a case where a worker has been assigned to the work item, the Assignment Status indicates the assigned worker.

In the example embodiment, work item attributes are used to prioritize the work item and allocate a worker to the work item. In the example embodiment, work item attributes are also used at worker endpoints (e.g., 140 of FIG. 1, 772, 773 of FIG. 7) during processing of the work item by a worker corresponding to the worker endpoint.

In an implementation, the work distribution system 700 uses the workflow information to access a workflow instruction document of the external system (e.g., 770 that added the work-item. The work distribution platform 700 uses the workflow instruction document to assign a priority to the work item and to assign a worker to the work item. In an implementation, the workflow information is a URI that identifies a resource at the external system (e.g., 770 that provides the workflow instruction document for the added work item.

In an implementation, the work collections module 705 stores work collection resources for each added work collection. In an implementation, a work collection resource is at least one of a data object, record, or set of data properties stored within the work collections module 705. In an implementation, each work collection resource includes the following information: 1) Work Collection Identifier, 2) Account Identifier, 3) Primitive Group Identifier, and 4) Work Collection Name.

In an implementation, the Work Collection Identifier is a unique identifier assigned to the work collection by the work distribution system 700.

In the example embodiment, API call requests received by the work item API module 704 include authenticating parameters, which are used by the system 700 to verify authenticity of the API call requests. In an implementation, API call requests received by the work item API module 704 specify an account ID and a corresponding authentication token, and the work item API module 704 uses the account module 701 to authenticate the API call request.

Table 2 shows the API call requests (and the corresponding parameters) that are processed by the work item API module 704, in accordance with an implementation.

TABLE 2 Work Item API WORK ITEM API CALL REQUEST PARAMETERS Add Work Item <Work Item Attributes>, <Workflow Information>, <Account Identifier>, <Authentication Token>, (Optional Parameters: <Work Collection Identifier>, <Primitive Group Identifier>) Remove Work Item <Worker Item Identifier>, <Account Identifier>, <Authentication Token> Read Work Item Resource (managed <Worker Item Identifier>, <Account by the Work Collections Module 705) Identifier>, <Authentication Token> Update Work Item Attributes <Worker Item Identifier>, <Worker Attributes>, <Account Identifier>, <Authentication Token> Update Work Item Assignment Status <Worker Item Identifier>, <Worker Assignment Status>, <Account Identifier>, <Authentication Token> Add Work Collection <Work Collection Name>, <Account Identifier>, <Authentication Token>, (Optional Parameters: <Primitive Group Identifier>) Remove Work Collection <Worker Collection Identifier>, <Account Identifier>, <Authentication Token> Read Work Collection Resource <Work Collection Name>, <Account (managed by the Work Identifier>, <Authentication Token> Collections Module 705)

In an implementation, the work distribution system 700 responds to a Work Item API ADD request by providing the requestor (e.g., the external system 770) with a Work Item Identifier in the case of a successful ADD operation, or an error message in a case of an unsuccessful ADD operation.

In an implementation, the Add Work Item API call request includes the optional parameters <Work Collection Identifier> and <Primitive Group Identifier> to specify one or both of a Work Collection Identifier and a Primitive Group Identifier for the added work item. In an implementation, the work distribution system 700 automatically assigns a Work Collection Identifier and a Primitive Group Identifier for the added work item based on Account Preferences of the work distribution account specified by the <Account Identifier> parameter.

In an implementation, the Add Work Collection API call request includes the optional parameter <Primitive Group Identifier> to specify a Primitive Group Identifier for the added work collection.

In an implementation, the work distribution system 700 automatically assigns a Primitive Group Identifier for the added work collection based on Account Preferences of the work distribution account specified by the <Account Identifier> parameter.

Work Collections Module 705

In the example embodiment, the work collections Module 705 functions to manage sets of work collections of all accounts and sub-accounts of the work distribution system 700. In an implementation, a set of work collections is a primitive group. In an implementation, a set of work collections is a workspace.

In the example embodiment, a pending work item (e.g., a work item that is added to the system 700 but not assigned to a worker) of an account (or sub-account) resides in a work collection of the account (or sub-account), and the work collection module 705 manages the work collections of the system 700. In the example embodiment, each account and sub-account of the work distribution system 700 has a set of one or more work collections, and the work collections module 705 manages the sets of work collections of all accounts and sub-accounts of the work distribution platform 700.

FIG. 15 depicts exemplary work collection sets managed by the work collections module 705. As shown in FIG. 15, the work collections module 705 manages work collection sets 1541, 1542, 1543, 1544 and 1545. The work collection set 1541 includes three work collections 1551, 1552 and 1553. The work collection set 1542 includes one work collection 1554. The work collection set 1543 includes two work collections 1555 and 1556. The work collection set 1544 includes two work collections 1557 and 1558. The work collection set 1545 includes one work collection 1559.

In the example embodiment, work collections 1551 to 1559 are similar to the work collections 110 of FIG. 1.

The work collections 1551 to 1559 include work items 1561 to 1575 as shown in FIG. 15. In the example embodiment, the work items 1561 to 1575 are each similar to the work item 111 of FIG. 1.

In an implementation, the work collection sets 1541 and 1542 are associated with an account (e.g., the account 1401 of FIG. 14) of the external system 770, and the work collection set 1543 is associated with a second account (e.g, the account 1404 of FIG. 14) of the external system 770. The work collection set 1544 is associated with a sub-account (e.g., the account 1402 of FIG. 14) of the first account of the external system 770. The work collection set 1545 is associated with an account (e.g., the account 1405 of FIG. 14) of a second external system 1591 that is different from the system 770.

In the example embodiment, an account holder manages work collections by using the workflow API Module 707. In some embodiments, an account holder manages work collections by using an API for the work collections. In some embodiments, the work distribution system 700 manages work collections according to workflow instructions.

In the example embodiment, each work collection can be configured to specify operational logic. In some embodiments, each work collection is constructed to include an attribute that specifies an expression that defines worker selection criteria for work items residing in the work collection, and a corresponding external system configures the worker selection criteria by using at least one REST API.

In an implementation, the work collection is a queue. In some implementations, the work collection is at least one of a queue, a bin, a set and a list.

In an implementation, a work item residing in a work collection is ordered in accordance with a priority assigned to the work item by the work distribution system 700 based on a workflow instruction corresponding to the workflow information of the work item.

In some implementations, at least one work collection of the system 700 is an unordered collection of work items.

Work Distribution Processing Engine 706

In the example embodiment, the work distribution processing Engine 706 functions to assign priorities to work items of the system 700 and assign workers to work items of the system 700.

In the example embodiment, the work distribution processing Engine 706 includes a workflow API module 707, a work distribution module 708, and a workflow instruction module 709. In some implementations, the work distribution processing engine 706 includes the distribution API module 710. In some implementations, the work distribution system does not include a distribution API module.

Workflow API Module 707

In an implementation, the workflow API module 707 functions to provide a workflow instruction document request to the system 770, the request identifying a URI (Uniform Resource Identifier) that identifies a resource of the external system 770 that provides the workflow instruction document for the work item. In an implementation, the system 770 responds to the workflow instruction document request by providing the workflow API module 707 with a work instruction document response in accordance with the workflow API. In an implementation, a workflow instruction document response in accordance with the workflow API includes the Workflow Instruction Document. In an implementation, the workflow instruction document response in accordance with the workflow API includes the Workflow Instruction Document and an Assignment Callback, and responsive to assignment of a worker to the work item, the work distribution system 700 provides assignment information to the external system 770 via the Assignment Callback.

In the example embodiment, API call requests received by the workflow API module 707 include authenticating parameters, which are used by the system 700 to verify authenticity of the API call requests. In an implementation, API call requests received by the workflow API module 707 specify an account ID and a corresponding authentication token, and the workflow API module 707 uses the account module 701 to authenticate the API call request.

In an implementation, the workflow API module 707 functions to provide a Workflow API that is used by an external system to manage workflow instructions of a specified account. The workflow API module 707 is constructed to process requests received from an external system to add a workflow instruction to the work distribution system 700, and requests received from an external system to remove a workflow instruction from the work distribution system 700, read a workflow instruction, and update a workflow instruction.

Table 3 shows the API call requests (and the corresponding parameters) that are processed by the workflow API module 707, in accordance with an implementation.

TABLE 3 Workflow API Workflow API CALL REQUEST PARAMETERS Add Workflow Instruction <Workflow Instruction Name>, <Workflow Instruction>, <Assignment Callback>, <Account Identifier>, <Authentication Token>, (Optional Parameters: <Primitive Group Identifier>) Remove Workflow Instruction <Workflow Instruction Name>, <Account Identifier>, <Authentication Token> Read Workflow Instruction (managed <Workflow Instruction Name>, <Account by the Work Instruction Module 709) Identifier>, <Authentication Token> Update Workerflow Instruction <Workflow Instruction Name>, <Workflow Instruction>, <Assignment Callback>, <Account Identifier>, <Authentication Token>

As shown in Table 3, in an implementation, the Add Workflow Instruction API call request includes the optional parameter <Primitive Group Identifier> to specify a Primitive Group Identifier for the added workflow instruction. In an implementation, the work distribution system 700 automatically assigns a Primitive Group Identifier for the added workflow instructions based on Account Preferences of the work distribution account specified by the <Account Identifier> parameter.

Work Distribution Module 708

In the example embodiment, the work distribution module 708 functions to assign priorities to work items of the system 700 and assign workers to work items of the system 700.

Workflow Instruction Module 709

In the example embodiment, the workflow instruction module 709 functions to manage workflow instructions of the work distribution system 700.

API Call Request Queuing

In the example embodiment, the worker API module 702, the work item API module 704, and the workflow API module 707 each place received API call requests in a respective API call request queue.

In an implementation, API call requests are serviced at a rate suitable for the current capacity of the work distribution system 700. The servicing rate may alternatively be adjusted according to the number of requests in the respective API call request queue. In an implementation, an API call request is placed in a respective API call request queue when capacity is exceeded or alternatively placed in the queue for every request or based on any suitable rule.

In an implementation API call requests of different work distribution accounts (and sub-accounts) are ordered in the respective queue in a staggered or alternating fashion. In some implementations, account holders have priority based on at least one of a service plan, a first-come-first-serve policy, a type of call request, and any suitable type of policy.

In some implementations, the worker API module 702, the work item API module 704, and the workflow API module 707 each have an API call request queue dedicated to requests of a single account holder, API call requests are organized into an API call request queue for each account holder, and dequeueing occurs in an alternating fashion between the plurality of API call request queues.

Communication Platform 711

In the example embodiment, the communication platform 711 functions to provide telephony communication to the work distribution system 700 via a REST API, and generates outgoing telephony communication initiated via the REST API. In the example embodiment, the communication platform 711 is external to the work distribution system 700. In some embodiments, the communication platform is internal to the work distribution system 700.

In the example embodiment, the communication platform 711 is used in the execution of communications based applications. For example, the communication platform can facilitate execution of automated call logic such as in U.S. Pat. No. 8,306,021 issued on 6 Nov. 2012, which is hereby incorporated in its entirety by this reference. In the example embodiment, the communication platform 711 is a telephony communication platform. In some embodiments, the communication platform is any suitable type of communication platform.

In some implementations, the system 700 receives work items from the communication platform 711 via the work item API module 704.

4. Method for a Multi-Tenant Work Distribution Platform

As shown in FIG. 8, a method for a multitenant work distribution platform (e.g., the platform of the system 700 of FIG. 7) in accordance with an example embodiment includes: assigning a priority to a first work item (e.g., one of the work items 1561 to 1575 of FIG. 15) of a first external system (e.g., the external system 770 of FIG. 7) S810, and assigning a worker (e.g., a worker associated with one of the worker endpoints 772 and 773 of FIG. 7) to the first work item S820.

In the example embodiment of FIG. 8, the method of FIG. 8 is implemented in the multi-tenant work distribution system 700 of FIG. 7. In the example embodiment, the Work Distribution Processing Engine 706 performs the blocks S810 and S820. In some embodiments, the method of FIG. 8 is implemented in any suitable type of multi-tenant work distribution system.

Block 810, which includes assigning a priority to a first work item of a first external system, functions to assign the priority to the work item (e.g., the work item 1561 of FIG. 15) based on work item attributes (e.g., 1102 of FIG. 11) of the work item and a workflow instruction (e.g., the workflow instruction 1020 of FIG. 10) corresponding to workflow information (e.g., 1103 of FIG. 11) specified by the work item. In the example embodiment, the work item is received via the work item API module 704. In an implementation, the workflow instruction is provided by the external system via the workflow API module 707. In the example embodiment, the work item is specified in a work item API call request provided by the external system 770 and received by the work item API module 704. In an implementation, the workflow instruction is specified in a workflow API call request provided by the external system 770 and received by the workflow API module 707. In an implementation, the workflow instruction is specified in a workflow API response provided by the external system 770 and received by the workflow API module 707 responsive to a request provided by the workflow API module 707 to the external system 770. During processing of the work item API call request, the system adds the work item to a work collection managed by the work collection module 705. In an implementation, the work collection is specified in the API call request. In an implementation, the work collection is specified by configuration information associated with the account holder corresponding to the work item API call request. In an implementation, the work collection is a default work collection. Responsive to selection of the work item in the work collection, the system 700 assigns the priority to the work item.

As shown in FIG. 9, in an implementation of the example embodiment assigning a priority to a work item of a first external system includes accessing a workflow instruction document (e.g., 1000 of FIG. 10) specified by the workflow information (e.g., 1103 of FIG. 11) of the work item S811, and applying a prioritization function (e.g., 1010 of FIG. 10) to the work item S812.

Block S811, which includes accessing a workflow instruction document specified by the workflow information of the work item, functions to control the work distribution module 708 to access the workflow instruction document by using the workflow instruction module 709. In the example embodiment, the workflow instruction document (e.g., 1000 of FIG. 10) specifies the prioritization function (e.g., 1010 of FIG. 10), and the prioritization function includes the workflow instruction (e.g., 1020 of FIG. 10). FIG. 10 depicts an exemplary workflow instruction document 1000 that includes a prioritization function 1010 and a workflow instruction 1020. The prioritization workflow instruction 1020 defines a work item expression “(work.attributes.valueClassification==‘gold’)” and a corresponding priority value “work.priority+20”. In the example embodiment, the work distribution system 700 defines an expression syntax for work item expressions used in the work distribution system 700. FIG. 11 depicts a data structure that represents an exemplary first work item 1101. As shown in FIG. 11, the work item 1101 has work item attributes 1102 that include a “valueClassification” attribute having a “gold” value. During processing of the work item 1101 by using the workflow instruction document 1000, the workflow distribution module 708 determines that the work item 1101 matches the first work item expression of the prioritization workflow instruction 1020 because the first work item expression specifies a “gold” value for the “valueClassification” work item attribute and the work item 1101 has a “valueClassification” work item attribute having a “gold” value.

In the example embodiment, the external system (e.g., 770 of FIG. 7) defines the workflow instructions of the workflow instruction document (e.g., 1000) according to the expression syntax defined by the work distribution system 700, and the external system also specifies the work item attributes of the work item (e.g., 1101). In this manner, the external system (e.g., 770) can use the work distribution system 700 to perform work item distribution in accordance with business logic of the external system. In this manner, the work distribution system 700 can be used to distribute any type of work item for any type of external system.

FIGS. 12A, 12B and 12C depict exemplary prioritization functions in accordance with implementations.

The prioritization function of FIG. 12A functions to prioritize a work item “work” based on an initial priority “work.priority” of the work item. The prioritization function of FIG. 12B functions to prioritize a work item “work” based on an amount that an account holder's customer associated with the work item spends (e.g., “work.attributes.spend>10000”) per month for use of the service provided by the account holder. As shown in FIG. 12B, a work item associated with a customer spending over $10,000 a month is assigned a priority value of 10, whereas a work item associated with a customer spending over $1,000 (but not over $10,000) a month is assigned a priority value of 5. The prioritization function of FIG. 12C functions to prioritize a work item “work” based on an amount of elapsed since the work item was added to the work distribution system 700. As shown in FIG. 12C, if over five minutes has elapsed, then the priority of the work item is increased by 10, and a check of the work item's wait time is scheduled in another five minutes.

In an implementation, the workflow instruction module 709 receives the workflow instruction document from the external system 770 via the workflow instruction API module 707. In an implementation, the workflow instruction module 709 stores the workflow instruction document received from the external system. In an implementation, the workflow instruction module 709 uses the workflow information (e.g., 1103 of FIG. 11) specified by the work item to access the workflow instruction document from the external system 770. In an implementation, the workflow information includes a URI (Uniform Resource Identifier) that identifies a resource of the external system 770 that provides the workflow instruction document for the work item. In an implementation, the workflow instruction module 709 provides a workflow instruction document request to the system 770 via the workflow instruction API module 707, the request identifies the URI of the workflow information of the work item, and, responsive to the workflow instruction document request, the external system 770 provides the workflow instruction document in a workflow instruction document response (in accordance with the workflow API). In an implementation, the workflow instruction document request specifies metadata of the work item and the corresponding work collection, and the external system uses the metadata to provide the workflow instruction document. In an implementation, the workflow instruction document request specifies metadata of the work item, the corresponding work collection, and corresponding workers, and the external system uses the metadata to provide the workflow instruction document. In an implementation, the external system 770 uses internal state information of the system 770 to generate the workflow instruction document. By virtue of the workflow instruction module 709 accessing the workflow instruction document specified by the workflow information of the first work item from the external system 770 after the external system 770 provides the request to add the work item to the work distribution system 700, the external system 770 can generate workflow instructions for the work item during processing of the work item to assign a priority and during processing of the work item to assign a worker.

In an implementation, if a workflow instruction document corresponding to the workflow information is stored by the workflow instruction module 709 prior to block S811, then the workflow instruction module 709 accesses the stored workflow instruction document at block S811 instead of receiving the workflow instruction document from the external system 770. In an implementation, if a workflow instruction document corresponding to the workflow information is stored by the workflow instruction module 709 prior to block S811 and a configuration parameter configures the workflow instruction module 709 to access stored workflow instruction documents when available, then the workflow instruction module 709 accesses the stored workflow instruction document at block S811 instead of receiving the workflow instruction document from the external system 770; otherwise if the configuration parameter configures the workflow instruction module to retrieve the workflow instruction document from the external server regardless of whether the document is stored by the workflow instruction module 709, then the workflow instruction module 709 receives the workflow instruction document from the external system 770.

Block S812, which includes applying the prioritization function (e.g., the prioritization function 1010 of FIG. 10) to the work item (e.g., the work item 1101 of FIG. 11), functions to control the work distribution module 708 to assign the priority value to the work item responsive to a determination by the work distribution module 708 that the work item matches the work item expression.

Reverting to FIG. 8, block 820, which includes assigning a worker to the work item, functions to assign a worker to the work item based on the priority (e.g., 1104 of FIG. 11) of the work item, the workflow information (e.g., 1103 of FIG. 11), and worker state managed by the external system (e.g., 770 of FIG. 7) via the worker API module 702. In the example embodiment, the worker state includes worker attributes, the work item is generated by the external system (e.g., 770 of FIG. 7), and the workflow instruction (e.g., 1020 of FIG. 10) is managed by the external system via the Workflow API module 707.

In an implementation, the external system 770 generates the work item based on a telephony communication received by the external system 770.

In an implementation, the work item attributes of the work item are specified by the external system 770 via the work item API module 704, and the worker attributes are specified by the external system 770 via the worker API module 702.

As shown in FIG. 13, in an implementation of the example embodiment, assigning a worker to the work item includes selecting the work item from a work collection in which the work item resides S821, accessing the workflow instruction document S822, determining a first available worker S823, applying a distribution function to the work item and the first available worker S824, and assigning the first available worker to the work item S825.

Block S821, which includes selecting the work item from a work collection in which the work item resides, functions to control the work distribution module 708 to select the work item (e.g., 1561 of FIG. 15) from the work collection (e.g., 1551 of FIG. 15) based on the assigned priority of the work item. In the example embodiment, the work collection is managed by the work collections module 705, and the work distribution module 708 selects the work item by using the work collections module 705. In an implementation, work items residing in the work collection (e.g., the work items 1561, 1562, and 1563 of the work collection 1551 of FIG. 15) are ordered in accordance to priority values assigned to the work items, and responsive to a request for selection of a work item by the work distribution module 708, the work collections module 705 provides the work distribution module 708 with a work item (e.g., one of 1561-1563 of FIG. 15) having a highest priority value. In other words, the selected work item is the work item of the work collection having a highest priority value.

In some implementations, the work items residing in the work collection are unordered, and responsive to a request for selection of a work item by the work distribution module 708, the work collections module 705 provides the work distribution module 708 with a work item based on at least one of a FIFO (First In First Out) selection technique, a LIFO (Last In First Out) selection technique, attributes of the work items, and any other suitable work item selection technique.

In an implementation, the work collection is a queue. In some implementations, the work collection is at least one of a queue, a bin, a set and a list.

Block S822, which includes accessing the workflow instruction document, functions to functions to control the work distribution module 708 to access the workflow instruction document (e.g., 1000 of FIG. 10) by using the workflow instruction module 709 as described herein for block S811. In the example embodiment, the workflow instruction document specifies a distribution function. The distribution function defines an assignment expression. FIG. 10 depicts an exemplary workflow instruction document 1000 that includes a distribution function 1030 and an assignment expression 1040. The assignment expression 1040 specifies work item attributes (e.g., “valueClassification”, “language”, “segment”, “region”) and worker attributes (e.g., “English”, “retentionSkill”, “location”). In the example embodiment, the work distribution system 700 defines an expression syntax for assignment expressions used in the work distribution system 700. FIG. 11 depicts a data structure that represents an exemplary work item 1101. As shown in FIG. 11, the work item 1101 has work item attributes 1102 that include a “valueClassification” attribute having a “gold” value, a “language” attribute having an “English” value, a “Segment” attribute having a “retention” value, and a “region” attribute having a “California” value.

During processing of the work item 1101 by using the workflow instruction document 1000, the workflow distribution module 708 determines that the work item 1101 and a worker having a “English” attribute with a value greater than 10, “retentionSkill” attribute with a value greater than 15, and a “location” attribute having a “California” value match the assignment expression 1040

FIGS. 12D and 12E depict exemplary distribution functions in accordance with implementations. The distribution function of FIG. 12D functions to assign a first available worker to the highest priority work item. The distribution function of FIG. 12E functions to assign a worker with the language skills to service the work item.

Block S823, which includes determining a first available worker, functions to control the work distribution module 708 to determine a first available worker (e.g., a worker associated with one of worker endpoints 772 and 773 of FIG. 7) managed by the external system 770 based on worker state managed by the external system (e.g., 770 of FIG. 7). In the example embodiment, the worker state for each worker includes a status which indicates whether the worker is available.

The work distribution module 708 accesses worker state for all workers associated with the work distribution account corresponding to the first work item. In some implementations, the work distribution module 708 accesses worker state for all workers associated with both the work distribution account and a workspace corresponding to the first work item. In some implementations, the work distribution module 708 accesses worker state for all workers associated with both the work distribution account and a primitive group corresponding to the first work item.

By accessing worker state for a work item based on a matching work distribution account, account holders can configure the pool of workers available to process the work items of the account holder. In other words, not only can an account holder mange generation of work items and workflow of work item assignment to workers, the account holder can also manage the pool of workers available for processing of the work items. In this manner, the work distribution system 700 provides a multi-tenant platform in which each account holder of the work distribution platform can manage their own pool of workers. In some implementations, workers can be used across accounts, with workers managed by a first account holder being available to process work items of a different account holder.

By accessing worker state for a work item based on a matching work distribution account and workspace or primitive group, account holders can configure the pools of workers for each workflow. For example, an account holder can have a primitive group (or workspace) for a sales workflow and a primitive group (or workspace) for a support workflow, and the account holder can configure different pools of workers for each of the support workflow and the sales workflow.

As another example, an account holder can have a primitive group (or workspace) for each sub-account, and the account holder can configure different pools of workers for each sub-account. For example, in a case of an account holder that provides work distribution sub-accounts for each customer of the account holder, the account holder can configure different pools of workers for each of the account holder's customers.

The distribution module 708 accesses the worker state by using the worker state module 703.

Block S824, which includes applying a distribution function to the work item (e.g., 1561 of FIG. 15) and the first available worker, functions to control the work distribution module 708 to determine a first one of available workers as identified by the accessed worker state, and apply the distribution function of the accessed workflow instruction document to the first available worker and the first work item to determine whether the first available worker matches the work item.

In an implementation, the distribution function (e.g., 1030 FIG. 10) defines an assignment expression (e.g., 1040 of FIG. 10), and the first available worker matches the work item if the work item attributes (e.g., 1102 of FIG. 11) of the work item and worker attributes of the first available worker match the assignment expression of the distribution function.

In an implementation, the worker state for each worker indicates an idle time for the worker, and the work distribution module 708 applies the distribution function to available workers based on idle time of each of the workers, such that a worker with a longer idle time is identified as an assignment candidate before other workers with shorter idle times.

Block S825, which includes assigning the first available worker to the work item, functions to control the work distribution module 708 to assign the first available worker to the work item responsive to a determination by the work distribution module 708 that the first available worker matches the work item.

In an implementation, the assignment expression includes a plurality of assignment sub-expressions, and in a case where the work item does not match any available worker based on a first assignment sub-expression, the work distribution module 708 determines whether any available workers match the work item based on a different sub-expression of the assignment expression. In an implementation, a plurality of sub-expressions are ordered, and the work distribution module 708 evaluates sub-expressions of the assignment expression according to the order of the sub-expressions in the assignment expression.

In an implementation, the work distribution module 708 records an assignment of the first available work item to the first work item.

In an implementation, the work distribution module 708 provides assignment information to the external system (e.g., 770 of FIG. 7) that provided the work item (e.g., 1561 of FIG. 15) via an HTTP callback (Assignment Callback) specified by the external system in association with the work item.

In an implementation, the assignment information specifies at least the worker attributes of the worker and the work item attributes of the work item.

The external system processes the work item responsive to receipt of the assignment information from the work distribution system 700.

In an implementation, external system 770 processes the work item by providing at least one work processing instruction to the work distribution system 770, and responsive to completion of processing of the work item by the worker, the work distribution system updates the worker state of the worker to include an available status such that the worker can be assigned to a new work item by the work distribution system 770.

In an implementation, the work processing instruction includes an instruction to provide information of the work item to a worker endpoint (e.g., one of 772 and 773 of FIG. 7) associated with the worker via a the distribution API 710.

In some implementations, the external system 770 processes the work item by providing information of the work item to a worker endpoint (e.g., one of 772 and 773 of FIG. 7) associated with the worker, and responsive to completion of processing of the work item by the worker, the external system 770 updates the worker state of the worker to include an available status via the worker API module 702 such that the worker can be assigned to a new work item by the work distribution system 700.

In an implementation, the first work item is delivered to a worker endpoint of the worker assigned to the first work item, in a manner similar to that described above for block S400 of FIG. 2.

In some implementations, the Work Distribution Processing Engine 706 performs the heuristics described herein for block S300 of FIG. 3, during performance of the blocks S810 and S820 of FIG. 8.

5. Method for a Multi-Tenant Work Distribution Platform

As shown in FIG. 16A, a method for a multitenant work distribution platform (e.g., the platform of the system 700 of FIG. 7) in accordance with an example embodiment includes: assigning a priority to a first work item (e.g., one of the work items 1561 to 1575 of FIG. 15) of a first external system (e.g., the external system 770 of FIG. 7) S1610, and assigning a worker (e.g., a worker associated with one of the worker endpoints 772 and 773 of FIG. 7) to the first work item S1620.

In the example embodiment of FIG. 16A, the method of FIG. 16A is implemented in the multi-tenant work distribution system 700 of FIG. 7. In the example embodiment, the Work Distribution Processing Engine 706 performs the blocks S1610 and S1620. In some embodiments, the method of FIG. 16A is implemented in any suitable type of multi-tenant work distribution system.

Block 1610, which includes assigning a priority to a work item of an external system, functions to assign the priority to the work item (e.g., the work item 1561 of FIG. 15) based on work item attributes of the work item and a workflow instruction corresponding to workflow information specified by the work item. In the example embodiment, the work item is received via the work item API module 704, and the workflow instruction is provided by the external system via the workflow API module 707. In the example embodiment, the work item is specified in a work item API call request provided by the external system 770 and received by the work item API module 704, and the workflow instruction is specified in a workflow API call request provided by the external system 770 and received by the workflow API module 707. In an implementation, responsive to the workflow instruction from the external system 770, the workflow instruction module 709 stores the workflow instruction. During processing of the work item API call request, the system 700 assigns the priority to the work item and places the work item in a work collection based on the workflow instruction. In an implementation, the workflow information specified by the work item identifies the workflow instruction provided by the external system 770 via the workflow API module 770 and stored by the workflow instruction module 709, and during processing of the work item API call request, the workflow instruction corresponding to the work item is accessed by using the workflow instruction module 709.

As shown in FIG. 16B, in an implementation of the example embodiment of FIG. 16A, assigning a priority to a work item of an external system includes accessing a workflow instruction specified by the workflow information of the work item, the workflow instruction specifying at least one work item expression and a corresponding priority S1611, and assigning the priority value corresponding to the workflow instruction to the work item responsive to a determination that the work item matches a work item expression of the workflow instruction S1612. In an implementation, the workflow instruction specifies a target worker expression corresponding to each work item expression of the workflow instruction.

As shown in FIG. 16C, in an implementation of the example embodiment of FIG. 16A, assigning a worker to the work item includes adding the work item in a work collection corresponding to the corresponding target worker expression S1621, selecting the work item from the work collection based on the assigned priority of the work item S1622, determining a first available worker having worker attributes that match the target worker expression S1623, and responsive to a determination of a first available worker having worker attributes that match the target worker expression, assigning the first available worker to the work item S1624. In an implementation, block S1624 (“assigning the first available worker to the work item”) is similar to block S825 (“assigning the first available worker to the work item”) of FIG. 8.

6. System Architecture: Work Distribution System

FIG. 17 is an architecture diagram of the work distribution system 700 according to an implementation in which the account module 701, the worker API module 702, the worker state module 703, the work item API module 704, the work collections module 705, the work distribution engine 706, and the distribution API module 710 are included in a server device.

The bus 1701 interfaces with the processors 1701A-1701N, the main memory (e.g., a random access memory (RAM)) 1722, a read only memory (ROM) 1704, a processor-readable storage medium 1705, a display device 1707, a user input device 1708, and a network device 1711.

The processors 1701A-1701N may take many forms, such as ARM processors, X86 processors, and the like.

In some implementations, the system 700 includes at least one of a central processing unit (processor) and a multi-processor unit (MPU).

As described above, the processors 1701A-1701N and the main memory 1722 form a processing unit 1799. In some embodiments, the processing unit includes one or more processors communicatively coupled to one or more of a RAM, ROM, and machine-readable storage medium; the one or more processors of the processing unit receive instructions stored by the one or more of a RAM, ROM, and machine-readable storage medium via a bus; and the one or more processors execute the received instructions. In some embodiments, the processing unit is an ASIC (Application-Specific Integrated Circuit). In some embodiments, the processing unit is a SoC (System-on-Chip). In some embodiments, the processing unit includes one or more of the account module 701, the worker API module 702, the worker state module 703, the work item API module 704, the work collections module 705, the work distribution engine 706, and the distribution API module 710.

The network adapter device 1711 provides one or more wired or wireless interfaces for exchanging data and commands between the system 1700 and other devices, such as devices of the external system 770 of FIG. 7. Such wired and wireless interfaces include, for example, a universal serial bus (USB) interface, Bluetooth interface, Wi-Fi interface, Ethernet interface, near field communication (NFC) interface, and the like.

Machine-executable instructions in software programs (such as an operating system, application programs, and device drivers) are loaded into the memory 1722 (of the processing unit 1799) from the processor-readable storage medium 1705, the ROM 1704 or any other storage location. During execution of these software programs, the respective machine-executable instructions are accessed by at least one of processors 1701A-1701N (of the processing unit 1799) via the bus 1701, and then executed by at least one of processors 1701A-1701N. Data used by the software programs are also stored in the memory 1722, and such data is accessed by at least one of processors 1701A-1701N during execution of the machine-executable instructions of the software programs.

The processor-readable storage medium 1705 is one of (or a combination of two or more of) a hard drive, a flash drive, a DVD, a CD, an optical disk, a floppy disk, a flash storage, a solid state drive, a ROM, an EEPROM, an electronic circuit, a semiconductor memory device, and the like. The processor-readable storage medium 1705 includes an operating system 1712, software programs 1713, device drivers 1714, the account module 701, the worker API module 702, the worker state module 703, the work item API module 704, the work collections module 705, the work distribution engine 706, and the distribution API module 710.

7. System Architecture: Application Server of External System

FIG. 18 is an architecture diagram of the application server 771 of the external system 770 of FIG. 7 according to an example embodiment. In an implementation, the processors 1801A-1801N, main memory 1822, read only memory (ROM) 1804, processor-readable storage medium 1805, display device 1807, user input device 1808, network device 1811, and processing unit 1899 are similar to the processors 1701A-1701N, main memory 1722, read only memory (ROM) 1704, processor-readable storage medium 1705, display device 1707, user input device 1708, network device 1711, and processing unit 1799 of FIG. 17.

The processor-readable storage medium 1805 includes an operating system 1812, software programs 1813, device drivers 1814, and application modules 1815. In an implementation, the application modules 1815 are constructed to manage work items by using the work item API of the work item API module 704 and manage workflow instructions by using the workflow API of the workflow API module 707, as described herein.

7. System Architecture: Worker Endpoint Device

FIG. 19 is an architecture diagram of a worker endpoint device 1900 of the external system 700 of FIG. 7 according to an example embodiment. The worker endpoint device 1900 implements the worker endpoint 772 of FIG. 7. In an implementation, a worker endpoint device that implements the worker endpoint 773 of FIG. 7 has an architecture similar to the architecture of the worker endpoint device 1900.

In an implementation, the processors 1901A-1901N, main memory 1922, read only memory (ROM) 1904, processor-readable storage medium 1905, display device 1907, user input device 1908, network device 1911, and processing unit 1999 are similar to the processors 1701A-1801N, main memory 1722, read only memory (ROM) 1704, processor-readable storage medium 1705, display device 1707, user input device 1708, network device 1711, and processing unit 1799 of FIG. 17.

The processor-readable storage medium 1905 includes an operating system 1912, software programs 1913, device drivers 1914, and a worker endpoint application module 1915. The worker endpoint application module 1915 includes a worker application endpoint module 1916 and a media endpoint module 1917.

The worker endpoint application module 1915 corresponds to the worker endpoint 772, the worker application endpoint module 1916 corresponds to the worker application endpoint 774, and the media endpoint module 1916 corresponds to the media endpoint 776 of FIG. 7.

In an implementation, the worker endpoint application module 1915 is constructed to manage a worker associated with the worker endpoint 772 of FIG. 7 by using the worker API of the worker API module 702 and process work items received by using the distribution API of the distribution API module 710, as described herein.

Conclusion

The systems and methods described herein with respect to a “first work item” and a “first external system” function in a similar manner with respect to other work items and external systems.

The system and method of the preferred embodiment and variations thereof can be embodied and/or implemented at least in part as a machine configured to receive a computer-readable medium storing computer-readable instructions. The instructions are preferably executed by computer-executable components preferably integrated with the work distribution system. The computer-readable medium can be stored on any suitable computer-readable media such as RAMs, ROMs, flash memory, EEPROMs, optical devices (CD or DVD), hard drives, floppy drives, or any suitable device. The computer-executable component is preferably a general or application specific processor, but any suitable dedicated hardware or hardware/firmware combination device can alternatively or additionally execute the instructions.

As a person skilled in the art will recognize from the previous detailed description and from the figures and claims, modifications and changes can be made to the preferred embodiments of the invention without departing from the scope of this invention defined in the following claims. 

What is claimed is:
 1. A method comprising: at a multi-tenant work distribution system that provides a work distribution service for a plurality of external systems, the work distribution system including a multi-tenant account module, a RESTful worker Application Programming Interface (API) module, a worker state module, a RESTful work item API module, a work collections module, and a work distribution engine: responsive to receipt of a RESTful work item API call request by the work item API module, the work distribution engine assigning a priority to a first work item of a first external system, the first work item being received via the RESTful work item API call request, the work distribution engine assigning the priority based on work item attributes of the first work item and a workflow instruction corresponding to workflow information specified by the first work item, the workflow instruction being provided by the first external system via a RESTful workflow API module of the work distribution engine; the work distribution engine assigning a worker to the first work item based on: the priority of the first work item, the workflow information, and worker state managed by the first external system via the RESTful Worker API module, the worker state including worker attributes, wherein the first work item is generated by the first external system, and the workflow instruction is managed by the first external system, wherein the work item attributes of the first work item are specified by the first external system via the work item API module, wherein the worker attributes are specified by the first external system via the worker API module, wherein the first external system defines the workflow instruction in accordance with a syntax defined by the work distribution system, wherein the worker state indicates at least one worker attribute and at least one worker status, wherein each of the plurality of external systems is associated with at least one work distribution account of the multi-tenant account module, wherein the first work item corresponds to a first work distribution account of the first external system, wherein each work distribution account of the multi-tenant account module is associated with at least one set of work distribution primitives, wherein work distribution primitives include workers, work items, work distribution workflows and work collections, and wherein the first external system manages the work distribution primitives associated with the first work distribution account by using at least one of the worker API module, the work item API module, the workflow API module, and a RESTful work collection API of the work collections module.
 2. The method of claim 1, wherein the work distribution system receives the first work item via a multi-tenant telephony communication platform that provides telephony communication to the work distribution system via a REST API and generates outgoing telephony communication initiated via the REST API.
 3. The method of claim 1, wherein if a worker cannot be assigned based on a first set of worker attributes specified in a workflow instruction corresponding to the workflow information, then a worker to be assigned to the work item is determined based on a second set of worker attributes specified in the workflow instruction.
 4. The method of claim 1, wherein the first work item is generated based on a telephony communication received by the first external system.
 5. The method of claim 1, wherein the plurality of external systems includes at least one of a customer service system, a CRM system, a call center system, a service provider system, a vehicular ride-share system, a service booking system, a question/solution system.
 6. The method of claim 1, wherein each set of work distribution primitives is organized into a workspace, and wherein the first work distribution account is associated with a plurality of workspaces.
 7. The method of claim 1, wherein each API call request provided by the first external system to the work distribution system identifies a corresponding work distribution account of the first external system, wherein the work distribution system bills the work distribution account of the first external system for API call requests, and wherein the work distribution system performs fraud detection to detect fraudulent API call requests.
 8. The method of claim 7, wherein the work distribution system assigns the priority to the first work item based on the work item attributes, and wherein the work distribution system assigns a worker to the first work item based on the work item attributes of the first work item.
 9. The method of claim 1, wherein the first external system uses the work item attributes to process the first work item responsive to assignment of a worker to the first work item.
 10. The method of claim 8, wherein the work distribution engine assigning a priority to the first work item comprises: accessing a workflow instruction document specified by the workflow information, the workflow instruction document specifying a prioritization function that includes the workflow instruction; applying the prioritization function to the first work item, wherein the prioritization function defines a first work item expression and a corresponding priority value, and the prioritization function assigns the corresponding priority value to the first work item responsive to a determination that first work item matches the first work item expression.
 11. The method of claim 10, wherein the work distribution engine assigning a worker to the first work item comprises: selecting the first work item from a work collection based on the assigned priority of the first work item; accessing the work flow instruction document, wherein the workflow instruction document specifies a distribution function; determining a first available worker managed by the first external system based on the worker state; applying the distribution function to the first work item and the first available worker to determine whether the first available worker matches the first work item; responsive to a determination that the first available worker matches the first work item, assigning the first available worker to the work item, wherein the distribution function defines an assignment expression and the first available worker matches the first work item if the work item attributes of the first work item and worker attributes of the first available worker match the assignment expression of the distribution function.
 12. The method of claim 1, further comprising, responsive to assignment of the worker to the first work item, providing assignment information to the first external system via an HTTP callback of the first external system, wherein the assignment information specifies at least the worker attributes of the worker, and the work item attributes of the work item.
 13. The method of claim 12, wherein the work distribution system adds received API call requests from the plurality of external systems to at least one API call request queue, and the work distribution system processes API call requests from the at least one API call request queue in an order based on at least one of at least one service plan of a respective external system, a first-come-first-serve policy, and a call request type.
 14. The method of claim 1, wherein the work distribution engine assigning a priority to the first work item comprises: accessing a workflow instruction specified by the workflow information, the workflow instruction specifying at least one work item expression and a corresponding priority; responsive to a determination that the first work item matches a first work item expression of the workflow instruction, assigning the corresponding priority value to the first work item.
 15. The method of claim 14, wherein the workflow instruction specifies a target worker expression corresponding each work item expression of the workflow instruction, wherein the work distribution engine assigning a worker to the first work item comprises: responsive to the determination that the first work item matches the first work item expression, adding the first work item in a work collection corresponding to the corresponding target worker expression; selecting the first work item from the work collection based on the assigned priority of the first work item; determining a first available worker having worker attributes that match the target worker expression; responsive to determination of a first available worker having worker attributes that match the target worker expression, assigning the first available worker to the work item.
 16. A method comprising: at a multi-tenant work distribution system that provides a work distribution service for a plurality of external systems, the work distribution system including a multi-tenant account module, a RESTful worker Application Programming Interface (API) module, a worker state module, a RESTful work item API module, a work collections module, and a work distribution engine: responsive to receipt of a RESTful work item API call request by the work item API module, the work distribution engine assigning a priority to a first work item of a first external system, the first work item being received via the RESTful work item API call request, the work distribution engine assigning the priority based on work item attributes of the first work item and a workflow instruction corresponding to workflow information specified by the first work item, the workflow instruction being provided by the first external system via a RESTful workflow API module of the work distribution engine; the work distribution engine assigning a worker to the first work item based on: the priority of the first work item, the workflow information, and worker state managed by the first external system via the RESTful Worker API module, the worker state including worker attributes, wherein the first work item is generated by the first external system, and the workflow instruction is managed by the first external system, wherein the work distribution engine assigning a priority to the first work item comprises: accessing a workflow instruction specified by the workflow information, the workflow instruction specifying at least one work item expression and a corresponding priority; responsive to a determination that the first work item matches a first work item expression of the workflow instruction, assigning the corresponding priority value to the first work item, and wherein the workflow instruction specifies a target worker expression corresponding each work item expression of the workflow instruction, and wherein the work distribution engine assigning a worker to the first work item comprises: responsive to the determination that the first work item matches the first work item expression, adding the first work item in a work collection corresponding to the corresponding target worker expression; selecting the first work item from the work collection based on the assigned priority of the first work item; determining a first available worker having worker attributes that match the target worker expression; and responsive to determination of a first available worker having worker attributes that match the target worker expression, assigning the first available worker to the work item.
 17. The method of claim 16, further comprising, responsive to assignment of the worker to the first work item, providing assignment information to the first external system via an HTTP callback of the first external system, wherein the assignment information specifies at least the worker attributes of the worker, and the work item attributes of the work item. 